package pe.com.pgn.consolidadorventas.servidorcentral.ws.domain.factory;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.jdom.Element;

import pe.com.pgn.consolidadorventas.servidorcentral.util.ArchivosUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.util.Base64Util;
import pe.com.pgn.consolidadorventas.servidorcentral.util.Constantes;
import pe.com.pgn.consolidadorventas.servidorcentral.util.LoggerUtil;
import pe.com.pgn.consolidadorventas.servidorcentral.ws.domain.GnvRptaConsultaVenta;
import pe.com.pgn.consolidadorventas.servidorcentral.ws.domain.gnv.GnvRegistroVenta;

public class GnvXmlToObjectFactory {

	static Logger logger = Logger.getLogger(GnvXmlToObjectFactory.class);

	public static void parsearArchivoZipeado(String rutaZip,String rutaDescomprimido,Element raiz,GnvRptaConsultaVenta resultadoOperacion){
		String hash = raiz.getChildText("contenido");
		byte[] buffer = Base64Util.convertirStringBase64Bytes(hash);
		ArchivosUtil.crearArchivoBinario(rutaZip,buffer);
		if(ArchivosUtil.verificarExistenciaArchivo(rutaZip)){
			ArchivosUtil.descomprimirArchivo(rutaZip,rutaDescomprimido);
			if(ArchivosUtil.verificarExistenciaArchivo(rutaDescomprimido)){
				int i = 0;
				List<String> lineas = ArchivosUtil.cargarArchivo(rutaDescomprimido, Constantes.COD_ANSI);
		    	List<GnvRegistroVenta> listadoVentas = new ArrayList<GnvRegistroVenta>();
				int dim = lineas.size();
				
				while(i<dim){
					String cadena = lineas.get(i);
					//Seccionamos la cadena
					String valores[]=cadena.split("\\;");
					GnvRegistroVenta g = GnvParserLinea.parsearLineaPrincipal(valores);
					if(g!=null){
						listadoVentas.add(g);
					}

		    		i = i + 1;
				}
				
				resultadoOperacion.setListaVentas(listadoVentas);
				
				if(!ArchivosUtil.borrarArchivo(rutaZip)){
					LoggerUtil.error(logger, "No se pudo borrar el archivo : "+rutaZip);
				}
			}
		}
	}
	
	@SuppressWarnings("unchecked")
	public static void parsearXmlDirecto(String rutaGuardarArchivo,Element raiz,GnvRptaConsultaVenta resultadoOperacion){
		//Tomamos todas las lineas
    	List<Element> lineas = (List<Element>)raiz.getChildren("c");
    	
    	//Lista de lineas para guardar el archivo recibido en un historico
    	List<String> lineasArchivo = new ArrayList<String>();
    	
    	int i = 0;
    	int dim = lineas.size();
    	
    	LoggerUtil.debug(logger,"Parseo xml gnv");
    	
    	List<GnvRegistroVenta> listadoVentas = new ArrayList<GnvRegistroVenta>();
    	
    	while(i<dim){
			String cadena = lineas.get(i).getText();
			lineasArchivo.add(cadena);
			
			//Seccionamos la cadena
			String valores[]=cadena.split("\\;");
			GnvRegistroVenta g = GnvParserLinea.parsearLineaPrincipal(valores);
			if(g!=null){
				listadoVentas.add(g);
			}

    		i = i + 1;
    	}
    	
    	//Si la fecha no esta vacia la guardamos
		if(!rutaGuardarArchivo.equals("")){
			boolean sw =  ArchivosUtil.guardarArchivo(rutaGuardarArchivo, lineasArchivo);
			if(sw==false){
				LoggerUtil.error(logger,"No se pudo guardar el archivo "+rutaGuardarArchivo);
			}
		}
		
		resultadoOperacion.setListaVentas(listadoVentas);
	}
}